package com.ruoyi.pack.service;

import java.util.List;
import com.ruoyi.pack.domain.PackProjectMaterial;

/**
 * 项目物料Service接口
 * 
 * @author ruoyi
 */
public interface IPackProjectMaterialService 
{
    /**
     * 查询项目物料
     * 
     * @param projectMaterialId 项目物料主键
     * @return 项目物料
     */
    public PackProjectMaterial selectPackProjectMaterialByProjectMaterialId(Long projectMaterialId);

    /**
     * 查询项目物料列表
     * 
     * @param packProjectMaterial 项目物料
     * @return 项目物料集合
     */
    public List<PackProjectMaterial> selectPackProjectMaterialList(PackProjectMaterial packProjectMaterial);

    /**
     * 查询项目物料列表（用于导出）
     * 
     * @param packProjectMaterial 项目物料
     * @return 项目物料集合
     */
    public List<PackProjectMaterial> selectPackProjectMaterialListForExport(PackProjectMaterial packProjectMaterial);

    /**
     * 新增项目物料
     * 
     * @param packProjectMaterial 项目物料
     * @return 结果
     */
    public int insertPackProjectMaterial(PackProjectMaterial packProjectMaterial);

    /**
     * 修改项目物料
     * 
     * @param packProjectMaterial 项目物料
     * @return 结果
     */
    public int updatePackProjectMaterial(PackProjectMaterial packProjectMaterial);

    /**
     * 批量删除项目物料
     * 
     * @param projectMaterialIds 需要删除的项目物料主键集合
     * @return 结果
     */
    public int deletePackProjectMaterialByProjectMaterialIds(Long[] projectMaterialIds);

    /**
     * 删除项目物料信息
     * 
     * @param projectMaterialId 项目物料主键
     * @return 结果
     */
    public int deletePackProjectMaterialByProjectMaterialId(Long projectMaterialId);

    /**
     * 根据项目ID查询项目物料列表
     * 
     * @param projectId 项目ID
     * @return 项目物料集合
     */
    public List<PackProjectMaterial> selectPackProjectMaterialByProjectId(Long projectId);

    /**
     * 根据项目ID删除项目物料
     * 
     * @param projectId 项目ID
     * @return 结果
     */
    public int deletePackProjectMaterialByProjectId(Long projectId);

    /**
     * 校验项目下物料编码是否唯一
     * 
     * @param packProjectMaterial 项目物料信息
     * @return 结果
     */
    public String checkMaterialCodeUnique(PackProjectMaterial packProjectMaterial);

    /**
     * 根据物料编码查询项目物料
     * 
     * @param materialCode 物料编码
     * @return 项目物料列表
     */
    public List<PackProjectMaterial> selectPackProjectMaterialByMaterialCode(String materialCode);

    /**
     * 导入项目物料数据
     * 
     * @param materialList 项目物料数据列表
     * @param isUpdateSupport 是否支持更新，如果已存在，则进行更新数据
     * @param operName 操作用户
     * @return 结果
     */
    public String importProjectMaterial(List<PackProjectMaterial> materialList, Boolean isUpdateSupport, String operName);

    /**
     * 批量新增项目物料
     * 
     * @param projectId 项目ID
     * @param materialList 项目物料列表
     * @return 结果
     */
    public int batchInsertProjectMaterial(Long projectId, List<PackProjectMaterial> materialList);
} 